package br.com.fiap.atividade5.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import br.com.fiap.atividade5.entity.Cliente;
import br.com.fiap.atividade5.entity.Produto;
import br.com.fiap.atividade5.entity.TipoCliente;

public class ClienteDAO extends GenericDAO<Cliente> {

	@Override
	protected PreparedStatement doGetByIdyStatement(Long id)
			throws SQLException {

		PreparedStatement st = getConnection().prepareStatement("SELECT * FROM CLIENTE WHERE CODIGO = ?");
		st.setLong(1, id);
		
		return st;
	}

	@Override
	protected PreparedStatement doInsertStatement(Cliente entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected PreparedStatement doUpdateStatement(Cliente entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected PreparedStatement doDeleteStatement(Cliente entity)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected Cliente createEntityByResultSet(ResultSet rs) throws SQLException {
		
		Cliente cliente = new Cliente();
		
		cliente.setCodigo(rs.getLong("CODIGO"));
		cliente.setNome(rs.getString("NOME"));
		cliente.setTipoCliente(TipoCliente.getEnumByKey(rs.getInt("TIPO_CLIENTE")));
		
		return cliente;
		
	}
	
	public final List<Cliente> listByTipo(TipoCliente tipo) throws Exception {
		
		List<Cliente> clientes = new LinkedList<Cliente>();
		
		try {
			
			abreConexao();
			
			PreparedStatement st = getConnection().prepareStatement("SELECT * FROM CLIENTE WHERE TIPO_CLIENTE = ?");
			
			st.setInt(1, tipo.getCodigo());
			
			ResultSet result = st.executeQuery();
			
			while (result.next()) {
				Cliente entity = this.createEntityByResultSet(result);
				clientes.add(entity);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			fechaConexao();
		}
		
		return clientes;
	}

}
